<!DOCTYPE html> 
<html>
<head>
<title>Skyline75489</title>
<meta charset='utf-8'>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<link rel="stylesheet" href="../static/styles/github.css">
<link rel="stylesheet" href="../static/post.css">
</head>
<body>

<div class="wrapper">
<div class="header">
	<span class="blog-name">Skyline75489</span>

<a class="nav" href="../index.html">Home</a>
<a class="nav" href="about.html">About</a>
</div>
<div class="content">

<h1>《代码整洁之道》读书笔记</h1>
<h3>命名</h3>
<ul>
<li>名副其实，体现本意</li>
<li>有意义的区分，要区分名称，就要让读者能够鉴别出不同之处</li>
<li>长名称胜过短名称，名称长度应该和它的作用于大小相对应</li>
</ul>
<h3>函数</h3>
<ul>
<li>函数应该短小</li>
<li>函数应该是做一件事，并做好这一件事</li>
<li>函数中的语句应该在同一抽象层级上</li>
<li>函数要么做一件事，要么回答一个问题，不要同时做这两个</li>
<li>参数应该尽量少，如果参数太多，应该把几个参数抽象成对象</li>
<li>使用异常，不要返回错误码</li>
<li>抽离错误处理语句，处理错误的函数不应再做其他事。</li>
<li>消除冗余，减少重复</li>
</ul>
<h3>注释</h3>
<ul>
<li>注释不能美化糟糕的代码，不要依赖注释来解释意图，而是尽量通过代码本身</li>
<li>对意图的注释，对特殊代码段的解释，有助于阅读代码的人更好的理解代码</li>
<li>减少喃喃自语，废话，以及误导性的注释</li>
<li>不要注释代码，直接删掉</li>
</ul>
<h3>对象和数据结构</h3>
<ul>
<li>使用数据结构便于在不改动既有数据结构的前提下添加新函数，使用面向对象代码便于在不改动既有函数的前提下添加新类</li>
<li>方法不应调用由任何函数返回的对象的方法。只和朋友谈话，不和陌生人谈话</li>
<li>连串调用是肮脏的风格</li>
</ul>
<h3>边界</h3>
<ul>
<li>学习性测试第三方API</li>
<li>将第三方API包装起来，以此来把第三方API的边界接口与程序的其他部分隔离开来</li>
</ul>
<h3>单元测试</h3>
<ul>
<li>保持测试整洁，测试代码和生产代码一样重要</li>
<li>F.I.R.S.T原则(Fast，Independent，Repeatable，Self-Validating，Timely)</li>
</ul>
<h3>类</h3>
<ul>
<li>类应该短小</li>
<li>类只应该有一个权责——只有一个修改的理由(单一权责原则，SRP)</li>
<li>系统应该由许多短小的类而不是少量巨大的类组成</li>
<li>保持内聚性就会得到许多短小的类</li>
<li>如果类丧失了内聚性，就拆分它</li>
<li>类应该对扩展开发，对修改封闭(开放-闭合原则，OCP)</li>
<li>类应该依赖于抽象而不是具体细节，通过部件之间的解耦来隔离修改(依赖倒置原则，DIP)</li>
</ul>
<h3>系统</h3>
<ul>
<li>将系统的构造和使用分开</li>
<li>依赖注入(?)</li>
<li>面向切面编程（类的横向解耦）</li>
<li>......（太复杂了，目前看不懂）</li>
</ul>
<h3>简单设计原则</h3>
<ul>
<li>运行所有测试</li>
<li>重构（测试消除了清理代码时害怕破坏原有代码的恐惧）</li>
<li>减少重复（小规模重用-&gt;大规模重用）</li>
<li>表达力（通过不断尝试和调整，增强代码的表达力）</li>
<li>尽量少的类和方法（No bullshit!!!）</li>
</ul>


</div>
</div>
<script src="../static/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
</body>

</html>
